package com.ceuer.pet.util;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Calendar;
import java.util.Date;

/**
 * 有关日期和时间的工具类
 */
public class DateUtil {
	
	/**
	 * 获取当前服务器的时间yyyy-MM-dd HH:mm:ss
	 * @return String
	 */
	public static String now(){
		String date="";
		date=DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss").format(LocalDateTime.now());
		return date;
	}
	
	/**
	 * 获取当前服务器的时间
	 * @param patten 传递的是日期时间的格式化模版
	 * @return String
	 */
	public static String now(String patten){
		String date="";
		date=DateTimeFormatter.ofPattern(patten).format(LocalDateTime.now());
		return date;
	}
	
	
	/**
	 * 把字符串日期转换成日期对象（默认的格式：yyyy-MM-dd）
	 * @param date
	 */
	public static Date strToDate(String date) throws ParseException {
		SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
		return sdf.parse(date);
	}
	
	/**
	 * 根据出生日期 计算年龄
	 * @param birthday
	 * @return int
	 */
	public static int getAge(String birthday){
		try {
			//part1 获取当前的日期对应的日历
			Calendar calendar=Calendar.getInstance();//实例化一个日历对象，默认就是当前的日期时间
			int now_year=calendar.get(Calendar.YEAR);//获取当前年份
			int now_month=calendar.get(Calendar.MONTH)+1;//获取当前月份
			int now_day=calendar.get(Calendar.DAY_OF_MONTH);//获取当前日
			//System.out.println(now_year+"-"+now_month+"-"+now_day);
			//#########################################################
			//part2 获取生日的日期对应的日历
			//? 如何吧一个字符串的日期转换成日历---> 1，先把字符串日期转成日期对象  2，把日期转成日历
			// SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
			// Date birthday_Date=sdf.parse(birthday);//先把字符串日期转成日期对象 ***
			calendar.setTime(strToDate(birthday));//把日期转成日历 ***
			int birthday_year=calendar.get(Calendar.YEAR);//获取当前年份
			int birthday_month=calendar.get(Calendar.MONTH)+1;//获取当前月份
			int birthday_day=calendar.get(Calendar.DAY_OF_MONTH);//获取当前日
			//System.out.println(birthday_year+"-"+birthday_month+"-"+birthday_day);
			//#########################################################
			//part3 计算年龄
			int age=now_year-birthday_year;
			//2002-10-06
			//2022-09-08
			//先判断月份
			// 10               09
			if(birthday_month>now_month){
				age--;
			}else if(birthday_month==now_month){//10     10
				//06            05
				if(birthday_day>now_day){
					age--;
				}
			}
			return age;
		}catch (Exception e){
			e.printStackTrace();
			return -1;
		}
	}
}
